package practice;

import java.util.Stack;

class MinStack {
    Stack<Integer> s1;
    Stack<Integer> s2;//最小值栈
    //初始化堆栈对象。
    public MinStack() {
        s1 = new Stack<>();
        s2 = new Stack<>();

    }

    //将元素val推入堆栈。
    public void push(int val) {
        //空栈
    if(s1.empty()){
      s1.push(val);
      s2.push(val);
    }else {//非空栈
        s1.push(val);
        int min = s2.peek();
        int curnum = val;
        if(curnum <= min){
            s2.push(val);
        }
    }

    }
    //删除堆栈顶部的元素。
    public void pop() {
    if(s1.empty()){
        return;
    }else {
        int tmp = s1.pop();
        int min = s2.peek();
        if(tmp == min){
            s2.pop();
        }
    }
    }
    // 获取堆栈顶部的元素。。
    public int top() {
        if (s1.empty()){
            return -1;
        }
        return s1.peek();

    }
   //获取堆栈中的最小元素。 
    public int getMin() {
        if (s2.empty()){
            return -1;
        }
        return s2.peek();

    }
}